Add private accessor for GdkKeyEvent.translated
authorEmmanuele Bassi <ebassi@gnome.org>
Fri, 22 May 2020 11:35:58 +0000 (12:35 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 24 May 2020 14:19:01 +0000 (15:19 +0100)
Avoid accessing the event structure directly, even from within GTK.

gdk/gdkevents.c
gdk/gdkeventsprivate.h

index 5495d5e6cad017abdcaa055fd16aea733bbbb3d8..cc26f2f0859dd0e6992f36deba690540c919b2b6 100644 (file)
@@ -1466,6 +1466,32 @@ gdk_key_event_new (GdkEventType      type,
   return event;
 }
 
+/*< private >
+ * gdk_key_event_get_translated_key:
+ * @event: (type GdkKeyEvent): a key event
+ * @no_lock: whether the translated key should take the event
+ *   state into account
+ *
+ * Extracts the translated key from a key event.
+ *
+ * Returns: (transfer none): the translated key
+ */
+GdkTranslatedKey *
+gdk_key_event_get_translated_key (GdkEvent *event,
+                                  gboolean  no_lock)
+{
+  GdkKeyEvent *self = (GdkKeyEvent *) event;
+
+  g_return_val_if_fail (GDK_IS_EVENT (event), NULL);
+  g_return_val_if_fail (GDK_IS_EVENT_TYPE (event, GDK_KEY_PRESS) ||
+                        GDK_IS_EVENT_TYPE (event, GDK_KEY_RELEASE), NULL);
+
+  if (no_lock)
+    return &(self->translated[1]);
+
+  return &(self->translated[0]);
+}
+
 /**
  * gdk_key_event_get_keyval:
  * @event: (type GdkKeyEvent): a key event
index 0a7b1300cddd35f2d78b4f7a5d8cede5bdb5287f..eca81486d2ed8d6a7b20faec0dcb008691ca0b28 100644 (file)
@@ -612,6 +612,9 @@ GdkEvent * gdk_grab_broken_event_new    (GdkSurface      *surface,
                                          GdkSurface      *grab_surface,
                                          gboolean         implicit);
 
+GdkTranslatedKey *      gdk_key_event_get_translated_key        (GdkEvent *event,
+                                                                 gboolean  no_lock);
+
 G_END_DECLS
 
 #endif /* __GDK_EVENTS_PRIVATE_H__ */